package com.heima.api;

import com.heima.api.fallback.ItemClientFallbackFactory;
import com.heima.dto.ItemDTO;
import com.heima.dto.OrderDetailDTO;
import com.heima.dto.PageItemDto;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import java.util.Collection;
import java.util.List;

//@FeignClient(value = "item-service",path = "/items",fallback = ItemClientFallbackClass.class)
@FeignClient(value = "item-service",path = "/items",fallbackFactory = ItemClientFallbackFactory.class)
public interface ItemClient {

    // 分页查询
    @GetMapping("/sync/{page}")
    PageItemDto queryPages(@PathVariable("page") Integer page);

    // 根据id批量查询商品
    @GetMapping
    List<ItemDTO> queryItemByIds(@RequestParam("ids") Collection<Long> ids);

    // 批量扣减库存
    @PutMapping("/stock/deduct")
    void deductStock(@RequestBody List<OrderDetailDTO> items);

    /**
     * 1 @EnableFeignClients 注解在启动引导类上，扫描全项目看能不能找到 @FeignClient 这个注解
     * 2、为@FeignClien注解所在的接口创建【动态代理】->然后交给SpringIOC容器管理
     * 3、解析远程调用信息
     *      3.1 获取服务名【item-service】
     *      3.2 根据服务名【item-service】获取可用列表
     *      3.3 采用负载均衡算法从可用列表选择一个实例  http://127.0.0.1:8082
     *      3.4 组长URL地址
     *              1：http://127.0.0.1:8082 /items
     *              2:参数解析
     *                      GET:组装参数字符串  ids=1.9 & name=wangwu
     *              3:完整路径拼接  http://127.0.0.1:8082 /item ? ids =1.9 & name=wangwu
     *      3.5  执行远程请求      HttpURLConnection -> 远程请求【模拟浏览器请求地址】 -> JSON
     *      3.6  解析结果集   JSON -> JSON转换 -> List<ItemDTO>
     */
}
